在談論數位憑證時,最常聽到的標準就是 X.509。這個標準幾乎是所有 SSL/TLS、HTTPS、VPN、電子簽章與 PKI 系統的基礎。但如果深入看一張憑證的內容,就會發現它是一大堆二進位或 Base64 的編碼資料。這些資料究竟是如何被描述、解析並且互通的呢?答案就是 ASN.1。
起源:X.509 是由 ITU-T(國際電信聯盟電信標準化部門)在 1988 年制定的標準,最初是為了電子目錄(X.500 系列)服務設計的。
用途:它規範了憑證的結構,定義了憑證內應該包含哪些欄位,以及如何驗證信任鏈。
核心內容:
簡單來說,X.509 就像是「數位身分證規格」,它規定了憑證應該有哪些欄位,以及這些欄位如何互相搭配。
那麼 X.509 憑證裡這些欄位是怎麼被精確描述的?這就需要 ASN.1(Abstract Syntax Notation One)。
定義:ASN.1 是一種標準化的描述語言,用於定義資料的結構,讓不同平台、語言、系統都能用一致方式解讀。
特色:
範例:以 ASN.1 定義的憑證結構 (簡化版):
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
這裡可以看到憑證是由三部分組成:
打個比方:
一張常見的憑證會長這樣(Base64 編碼後):
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAK1l7...
-----END CERTIFICATE-----
如果用工具(例如 openssl x509 -in cert.pem -text -noout
)解開,就能看到裡面的欄位。這些欄位就是根據 X.509 標準定義的,而它們的底層結構正是用 ASN.1 + DER 編碼的。
不管是憑證、公鑰、私鑰、PKCS7,都是 ASN.1 格式,可以透過線上的 ASN.1 JavaScript decoder 來進行解碼,並觀察其中的結構。
裝潢文青的滷肉飯,口味不錯,好吃,信義松山附近評價高的滷肉飯